/*-------------------------------------------------------------------------
 *
 * pgstrsignal.c
 *	  识别 Unix 信号编号
 *
 * 在符合现代 POSIX 的平台上，这只是利用 strsignal(3) 进行包装。
 * 在其他地方，我们会尽力而为。
 *
 * 此文件在 MSVC 构建中目前未构建，因为它在非 Unix 平台上没有用。
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * IDENTIFICATION
 *	  src/port/pgstrsignal.c
 *
 *-------------------------------------------------------------------------
 */

#include "c.h"


/*
 * pg_strsignal
 *
 * 返回一个字符串，以标识给定的 Unix 信号号。
 *
 * 结果被声明为 "const char *"，因为调用者不应该修改这个字符串。 但是请注意，POSIX 并没有保证字符串在后续调用 strsignal() 时仍然有效。
 *
 * 这个版本保证返回一个非 NULL 指针，尽管某些平台的 strsignal() 版本据说并非如此。
 *
 * 请注意，备用情况只是返回常量字符串，例如 "未识别的信号"。 项目风格是让调用者打印数字信号值及此函数的结果，因此没有必要更费劲。
 */
const char * pg_strsignal(int fc_signum)
{
	const char *fc_result;

	/*
	 * 如果我们有 strsignal(3)，就使用它 --- 但要检查其结果是否为 NULL。
	 */
#ifdef HAVE_STRSIGNAL
	fc_result = strsignal(fc_signum);
	if (fc_result == NULL)
		fc_result = "unrecognized signal";
#else

	/*
	 * 我们曾经在这里有代码尝试使用 sys_siglist[] 如果可用。
	 * 然而，看起来所有具有 sys_siglist[] 的平台这些年也一直有 strsignal()，所以这只是浪费代码。
	 */
	fc_result = "(signal names not available on this platform)";
#endif

	return fc_result;
}
